gtk_gesture_attach (swatch->priv->long_press_gesture, GTK_PHASE_BUBBLE);
swatch->priv->multipress_gesture = gtk_gesture_multi_press_new (GTK_WIDGET (swatch));
+ gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (swatch->priv->multipress_gesture), FALSE);
g_signal_connect (swatch->priv->multipress_gesture, "pressed",
G_CALLBACK (tap_action), swatch);
gtk_gesture_attach (swatch->priv->multipress_gesture, GTK_PHASE_BUBBLE);
static void
do_popup (GtkWidget *swatch,
- GdkEventButton *event)
+ gint button,
+ gint time)
{
GtkWidget *menu;
GtkWidget *item;
gtk_widget_show_all (item);
- if (event)
+ if (button != 0)
gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
- NULL, NULL, event->button, event->time);
+ NULL, NULL, button, time);
else
gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
popup_position_func, swatch,
- 0, gtk_get_current_event_time ());
-}
-
-static gboolean
-swatch_button_press (GtkWidget *widget,
- GdkEventButton *event)
-{
- GtkColorSwatch *swatch = GTK_COLOR_SWATCH (widget);
-
- gtk_widget_grab_focus (widget);
-
- if (gdk_event_triggers_context_menu ((GdkEvent *) event) &&
- swatch->priv->has_color)
- {
- do_popup (widget, event);
- return TRUE;
- }
- else if (event->type == GDK_2BUTTON_PRESS &&
- event->button == GDK_BUTTON_PRIMARY)
- {
- g_signal_emit (swatch, signals[ACTIVATE], 0);
- return TRUE;
- }
- else if (event->button == GDK_BUTTON_PRIMARY)
- {
- return TRUE;
- }
-
- return FALSE;
+ button, time);
}
static gboolean
return FALSE;
}
-static gboolean
-swatch_button_release (GtkWidget *widget,
- GdkEventButton *event)
-{
- GtkColorSwatch *swatch = GTK_COLOR_SWATCH (widget);
-
- if (event->button == GDK_BUTTON_PRIMARY &&
- swatch->priv->contains_pointer)
- return swatch_primary_action (swatch);
-
- return FALSE;
-}
-
static void
hold_action (GtkGestureLongPress *gesture,
gdouble x,
gdouble y,
GtkColorSwatch *swatch)
{
- if (n_press == 1)
- swatch_primary_action (swatch);
+ guint button;
+
+ button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture));
+
+ if (button == GDK_BUTTON_PRIMARY)
+ {
+ if (n_press == 1)
+ swatch_primary_action (swatch);
+ else if (n_press > 1)
+ g_signal_emit (swatch, signals[ACTIVATE], 0);
+ }
+ else if (button == GDK_BUTTON_SECONDARY)
+ {
+ if (swatch->priv->has_color)
+ do_popup (GTK_WIDGET (swatch), button, gtk_get_current_event_time ());
+ }
}
static void
static gboolean
swatch_popup_menu (GtkWidget *swatch)
{
- do_popup (swatch, NULL);
+ do_popup (swatch, 0, gtk_get_current_event_time ());
return TRUE;
}
widget_class->drag_data_received = swatch_drag_data_received;
widget_class->key_press_event = swatch_key_press;
widget_class->popup_menu = swatch_popup_menu;
- widget_class->button_press_event = swatch_button_press;
- widget_class->button_release_event = swatch_button_release;
widget_class->enter_notify_event = swatch_enter_notify;
widget_class->leave_notify_event = swatch_leave_notify;
widget_class->realize = swatch_realize;